package controller;

import java.util.Calendar;

import model.entidades.Sessao;
import model.entidades.Usuario;
import model.repositorio.SessaoDAO;

public class ControladorSessao {
	
	private static final long TEMPO_LIMITE = 60000; 
	
	public static final long TEMPO_RENOVACAO = 55000;
	
	private SessaoDAO sessaoDAO;
	
	public ControladorSessao() {
		sessaoDAO = new SessaoDAO();
	}
	
	public void criaSessao(Usuario usuario) throws ControladorExcecao {
		if (verificaSessao(usuario)) {
			throw new ControladorExcecao(ControladorExcecao.LOGIN_MULTIPLO);
		} else {
			Sessao sessao  = new Sessao();
			sessao.setUsuarioLogado(usuario);
			sessao.setTempo(Calendar.getInstance());
			sessaoDAO.salvar(sessao);
		}
	}
	
	public void renovaSessao(Usuario usuario) {
		Sessao s = sessaoDAO.buscaPorUsuario(usuario);
		s.setTempo(Calendar.getInstance());
		sessaoDAO.salvar(s);
	}
	
	public boolean verificaSessao(Usuario usuario) {
		
		Sessao s = sessaoDAO.buscaPorUsuario(usuario);
		
		if (s != null) {
			long diferenca = Calendar.getInstance().getTimeInMillis() - s.getTempo().getTimeInMillis();
			if(diferenca < TEMPO_LIMITE) {
				return true;
			}
			sessaoDAO.remover(s);
		}
		
		return false;
		
	}
	
	public void removeSessao(Usuario usuario) {
		sessaoDAO.remover(usuario);
	}

}
